import axios from "axios";
import { ElMessage, Loading } from 'element-plus'
import { getToken } from '@/utils/auth'
import {tansParams} from "@/utils/mango";

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL: process.env.VUE_APP_BASE_API,
    // 超时
    timeout: 1000*60*60
})
// request拦截器
service.interceptors.request.use(config => {
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false
    // 是否需要防止数据重复提交
    // const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
    if (getToken() && !isToken){
        config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
    }
    // get请求映射params参数
    if (config.method === 'get' && config.params) {
        let url = config.url + '?' + tansParams(config.params);
        url = url.slice(0, -1);
        config.params = {};
        config.url = url;
    }
    return config
},error => {
    console.log(error)
    Promise.reject(error)
})

service.interceptors.response.use(res => {
    //未设置状态码则默认成功
    const code = res.data.code || 500;
    const msg = res.data.msg || '未知错误，请联系管理员!'
    // 二进制数据则直接返回
    if(res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer'){
        return res.data
    }
    if (code !== 200){
        ElMessage({
            message: msg,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(new Error(msg))
    }else{
        return res.data
    }
},error =>{
    console.log('err' + error)
    let { message } = error;
    if (message === "Network Error") {
        message = "网络错误";
    }
    else if (message.includes("timeout")) {
        message = "系统接口请求超时";
    }
    else if (message.includes("Request failed with status code")) {
        // message = "系统接口" + message.substr(message.length - 3) + "异常";
        message = "系统接口" +  "异常";
    }
    ElMessage({
        message: message,
        type: 'error',
        duration: 5 * 1000
    })
    return Promise.reject(error)
})

export default service